#ifndef COURSE_H
#define COURSE_H

#include <QString>

class Course
{
public:                    //声明为公有的对象
    Course();

    QString name() const;
    void setName(const QString &name);

    QString code() const;
    void setCode(const QString &code);

    virtual void registerCourse() = 0;

    // 他们有相同的接口，都需要注册课程，但是他们实施的过程不一样；
    // 同时他们有自己复杂的特性，并不能用一个简单的属性继承（继承性）来实现；
    // abstract class抽象类的标志(1.virtual, 2.f()=0)，抽象类不能被实例化，Course是抽象类，因而Course不能被实例化
    // f()=0，就体现了架构师的关切——架构师不关心实现(在Course.cpp文件中并没有registerCourse的函数实现)，写抽象类的人不关心实现，只关心接口的统一格式。
    // 那么没有实现的函数怎么运行呢？答案是依赖于继承，复写(override)接口实现。

private:                  //封装性，私有的

    QString name_;
    QString code_;          //用QT的字符串来表示课名字和课程编号

};

#endif // COURSE_H
